// 测试mysql
#include <string>
#include <iostream>
#include <mysql/mysql.h>
#include "Http.hpp"
const std::string host = "127.0.0.1";
const std::string user = "debian-sys-maint";
const std::string passwd = "bMvj6Ro2k8bOGyRk";
const std::string db = "lianxi";
const unsigned int port = 3306;

int main()
{
    //userdata = req->Args();
    MYSQL *conn = mysql_init(NULL);
    if (!conn)
    {       
        LOG(FATAL, "init MYSQL error\n");
        exit(-1);
    }
    if (mysql_real_connect(conn, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, NULL, 0) == NULL)
    {
        LOG(FATAL, "connect MYSQL error\n");
        mysql_close(conn);
        exit(-1);
    }
    LOG(FATAL, "connect MYSQL success\n");
    mysql_set_character_set(conn,"utf8");



    //操作数据库
    std::string sql = "select * from sale_chance";
    int n = mysql_query(conn,sql.c_str());//执行mysql语句
    if(n == 0)
    {
        LOG(INFO, "mysql_query success\n");
    }
    else
    {
        LOG(FATAL, "mysql_query error\n");
        exit(-1);
    }
    MYSQL_RES* res = mysql_store_result(conn);//获取select的数据
    if(res == nullptr)
    {
        LOG(FATAL, "mysql_store_result error\n");
        exit(-1);
    }
    int rows = mysql_num_rows(res);//获取行数
    int fields = mysql_num_fields(res);//获取列数
    //属性
    MYSQL_FIELD* fields_array = mysql_fetch_fields(res);
    for(int i = 0;i < fields; i++)
    {
        std::cout<<fields_array[i].name<<"|";//获取第i列的属性
    }
    std::cout<<std::endl;
    //内容
    int i = 0;
    for(i = 0; i < rows; i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j = 0; j < fields; j++)
        {   
            std::cout<<row[j]<<"|";//获取第i行第j列的数据 类型为char*
        }
        std::cout<<std::endl;
    }



    mysql_free_result(res);
    mysql_close(conn);
    return 0;
}

// #include "TcpServer.hpp"
// #include "Http.hpp"
// #include <mysql/mysql.h>

// void Usage(std::string proc)
// {
//     std::cout << "Usage:\n\t" << proc << " local_port\n"
//               << std::endl;
// }

// std::shared_ptr<HttpResponse> Login(std::shared_ptr<HttpRequest> req)
// {
//     LOG(DEBUG, "=========================\n");
//     std::string userdata;
//     if (req->Method() == "GET")
//     {
//         userdata = req->Args();
//         MYSQL *conn = mysql_init(NULL);
//         if (!conn)
//         {
//             LOG(FATAL,"mysql_init() failed\n");
//             exit(-1);
//         }
//         if (mysql_real_connect(conn, "localhost", "root", "123456", "testdb", 0, NULL, 0) == NULL)
//         {
//             LOG(FATAL,"Connection failed: %s\n",mysql_error(conn));
//             mysql_close(conn);
//             exit(-1);
//         }
//     }
//     else if (req->Method() == "POST")
//     {
//         userdata = req->Text();
//     }
//     else
//     {
//     }

//     // 1. 进程间通信， 比如 pipe！ 还有环境变量！

//     // 2. fork();

//     // 3. exec(); python / php / java / C++

//     // 处理数据了

//     LOG(DEBUG, "enter data handler, data is : %s\n", userdata.c_str());

//     auto response = Factory::BuildHttpResponose();
//     response->AddStatusLine(200, "OK");
//     response->AddHeader("Content-Type", "text/html");
//     response->AddText("<html><h1>handler data done</h1></html>");
//     LOG(DEBUG, "=========================\n");
//     return response;
// }

// // ./httpserver port
// int main(int argc, char *argv[])
// {
//     if (argc != 2)
//     {
//         Usage(argv[0]);
//         return 1;
//     }
//     uint16_t port = std::stoi(argv[1]);
//     HttpServer httpservice;
//     // 仿照路径，来进行功能路由
//     httpservice.AddHandler("/login", Login);
//     // httpservice.AddHandler("/register", Login);
//     // httpservice.AddHandler("/s", Search);

//     TcpServer tcpsvr(port, std::bind(&HttpServer::HandlerHttpReqeust, &httpservice, std::placeholders::_1));
//     tcpsvr.Loop();

//     return 0;
// }